window.workspace = function(){
	var response = <?#$respons?>;
	var sid = {'name':Ext.id(), 'loading':Ext.id()};
	var design, grid, store, sm, graph, editor, win, nform, container;
	var hideSplash = function(){
		var splash = document.getElementById(sid.loading);
		if (splash != null){
			try{
				mxEvent.release(splash);
				mxEffects.fadeOut(splash, 100, true);
			}catch (e){
				splash.parentNode.removeChild(splash);
			}
		}
	};
	/********************Begin 前端工作流设计*********************************/
	function mxGraphApp(config) {
		var editor = null;
		try{
			if (!mxClient.isBrowserSupported()){
				mxUtils.error('您的浏览器不支持mxGraph', 200, false);
			}else{
				var node = mxUtils.load(config).getDocumentElement();
				editor = new mxEditor(node);
				hideSplash();
			}
		}catch (e){
			hideSplash();
			mxUtils.alert('无法启动应用程序: '+e.message);
			throw e;
		}
		return editor;
	}
	mxConstants.DEFAULT_HOTSPOT = 1;
	mxGraphHandler.prototype.guidesEnabled = true;
	mxGuide.prototype.isEnabledForEvent = function(evt){
		return !mxEvent.isAltDown(evt);
	};
	mxEdgeHandler.prototype.snapToTerminals = true;
	var html = '<div id="'+sid.loading+'" style="width:100%;height:100%;background:white;">'
		+'<img src="/static/lib/mxgraph/editors-img/loading.gif"></div>'
		+'<div id="__graph" style="width:100%;height:100%;overflow:hidden;font-size:8pt;white-space:nowrap;'
		+'border-style:solid;border-color:#F2F2F2;border-width:1px;'
		+'background: url(\'/static/lib/mxgraph/editors-img/grid.gif\');"></div>'
		+'<div id="__toolbar" class="mxWindow"></div>';//
	/********************End 前端工作流设计*********************************/	
	graph = {
		title		: '流程设计',
		html        : html,
		region		: 'center',
		listeners	: {
			'afterrender':function(){
				var xmlinc = '/static/lib/mxgraph/config/workfloweditor.xml';
				editor     = new mxGraphApp(xmlinc);
				var doc    = mxUtils.parseXml(response.data.svgxml);
				var node   = doc.documentElement;
				if(doc && node) {
					editor.readGraphModel(node);
				}
			}
		}
	};
	
	design = new Ext.form.FormPanel({
		region		: 'south',
		collapsible : true,
		titleCollapse : true,
		title		: '工作流程表单',
		bodyStyle	: 'padding:8px;',
		height		: 260,
		labelWidth	: 136,
		labelAlign  : 'right',
		defaults	: {
			xtype	  : 'textfield'
		},
		items		: [{
            xtype		: 'hidden',
            name		: 'id',
            value		: response.data.id
    	},{
			fieldLabel	: '流程名称',
			width		: 280,
			name		: 'name',
			value		: response.data.name
		},{
			fieldLabel	: '抄送HTTP通知',
			width		: 280,
			name		: 'ccapi',
			value		: response.data.ccapi
		},{
			fieldLabel	: '流程业务控制类',
			width		: 280,
			name		: 'clasz',
			value		: response.data.clasz
		},{
			xtype		: 'textarea',
			fieldLabel	: '流程定义描述',
			height		: 46,
			width		: 480,
			name		: 'details',
			value		: response.data.details
		},{
			xtype		: 'textarea',
			fieldLabel	: '流程备注说明',
			width		: 480,
			height		: 46,
			name		: 'remark',
			value		: response.data.remark
		},{
    		xtype		: 'button',
    		fieldLabel	: '::->',
    		url         : '/admin/workflow/dosave.html',
    		text 		: '保存资料',
    		handler		: function(){
    			var enc    = new mxCodec(mxUtils.createXmlDocument());
				var node   = enc.encode(editor.graph.getModel());
				var xmlsvg = mxUtils.getXml(node);
    			if(!design.getForm().isValid())
        			return;
    			design.getForm().submit({
	        		waitMsg 	: '数据提交处理中...',
					waitTitle 	: '信息提示',
					params: {
						'svgxml': xmlsvg
					},
	        		clientValidation: true,
	        		url		: '/admin/workflow/dosave.html',
		        	success	: function(form, action) {
		        		if(action.result.code == 0 && action.result.id > 0){
		        			design.getForm().findField('id').setValue(action.result.id);
		        		}
		        		Ext.Msg.alert('信息提示', '流程设置数据保存成功！');
					},
					failure	: main.submitFailure
		    	});
    		}
        }]
	});
	
	store = new Ext.data.JsonStore({
	    autoDestroy	: true,
	    url			: '/admin/workflow/node/dolist.json',
	    baseParams 	: {
	    	workflowid : response.data.id
		},
		autoLoad	: true,
	    root		: 'dataset',
	    fields		: ['id', 'name', 'result', 'roleid', 'role',
	    	'actions', 'preid','expire', 'formid', 'form']
	});
	sm   = new Ext.grid.CheckboxSelectionModel({singleSelect:true});
	grid = new Ext.grid.GridPanel({
		region 		: 'west',
		width		: 580,
		split       : true,
		collapseMode: 'mini',
		bodyBorder  : false,
		animCollapse: true,
		autoScroll  : true,
		store		: store, 
	    columns		: [
	        sm,
			{header: '编号', width:35, sortable:true, dataIndex:'id'},
			{header: '名称', width:60, dataIndex:'name'},
			{header: '业务方法', width:70, dataIndex:'actions'},
			{header: '任务角色', width:60, dataIndex:'role'},
			{header: '执行条件[前置节点结果匹配]', width:50, dataIndex:'result'},
			{header: '处理时长', width:50, dataIndex:'expire', renderer:function(val){
				var fval = parseFloat(val / 24.00);
				return (Math.round(fval*100)/100 + '天');
			}},
			{header: '前置节点', width:45, dataIndex:'preid'}
		],
	    viewConfig	: {
	        forceFit	 : true,
	        scrollOffset : 0
	    },
	    listeners   : {'rowdblclick':function(grid, index, e){
	    	var data  = grid.store.getAt(index).copy();
	    	addNode(data);
	    }},
	    sm			: sm,
	    stripeRows	: true,
	    tbar		: [{
			text	: '刷新',
			iconCls	: 'icon-refresh',
			handler : function(){
					store.reload(); 
				}
			},'-',{
			text	: '新增节点',
			iconCls	: 'icon-add',
			url     : '/admin/workflow/node/dosave.html',
			handler : function(){
					addNode(0);
				}
			},'-',{
			text	: '删除节点',
			iconCls	: 'icon-delete',
			url     : '/admin/workflow/node/dodelete.html',
			handler : function(){
				var rs = sm.getSelected();
				if(!rs) {
					return;
				}
				Ext.Msg.confirm('信息提示', '您确认要删除该节点吗？删除将不能恢复。',
					function(btn){
						if(btn != 'yes') {
							return;
						}
				        Ext.Ajax.request({
				        	url     : '/admin/workflow/node/dodelete.html',
				        	params	: {'ids':rs.get('id')},
				        	success	: function(resp, req) {
				        		var data = Ext.decode(resp.responseText);
								if(data.code == 0) {
									store.reload(); 
								} else {
									Ext.Msg.alert('信息提示', data.msg);
								}
				        	}
				        });
					});
				}
			},'-',{
			text	: '生成流程代码',
			iconCls	: 'icon-edit',
			url     : '/admin/workflow/docode.html',
			handler	: function(){
    			if(!design.getForm().isValid())
        			return;
    			var id = design.getForm().findField('id').getValue();
    			if(!id) {
    				Ext.Msg.alert('消息提示', '流程未保存不能生产代码'); return;
    			}
    			Ext.Msg.confirm('信息提示', '您确认要生成该流程代码吗？生成之后原先的代码将被清除。', function(btn){
					if(btn != 'yes') {
						return;
					}
			        Ext.Ajax.request({
						url		: '/admin/workflow/docode.html',
						params 	: {'id':id},
						success : function(resp, req){
							var data = Ext.decode(resp.responseText);
							Ext.Msg.alert('信息提示', data.msg);
						}
					});
    			});
    		}
        }],
		bbar		: ['<b>检索资料：</b>','名称:',{
			xtype       : 'textfield',
			id  		: sid.name,
			width	    : 100
		},{text			: '检索',
			iconCls			: 'icon-search',
			handler: function() {
				store.baseParams.name= Ext.getCmp(sid.name).getValue();
				store.reload(); 
			}
		}]
	});
	
	function addNode(data){
		if(!win) {
			nform = new Ext.form.FormPanel({
				frame		: true,
				border		: false,
				bodyStyle	: 'padding:8px;',
		        labelWidth	: 174,
		        labelAlign  : 'right',
		    	defaults	: {
		    		xtype	: 'textfield'
		    	},
		    	items		: [{
		            xtype		: 'hidden',
		            name		: 'id',
		            value		: 0
		    	},{
		            xtype		: 'textfield',
		            fieldLabel	: '节点名称',
		       		width		: 248,
		            name		: 'name',
		            allowBlank	: false
		    	},{
		            xtype		: 'textfield',
		            fieldLabel	: '节点业务处理方法名',
		       		width		: 200,
		            name		: 'actions',
		            allowBlank	: false
		    	},{
		            xtype		: 'textfield',
		            fieldLabel	: '执行条件[前置节点业务返回该值或-1则执行该节点,否则挂起]',
		       		width		: 200,
		            name		: 'result',
		            allowBlank	: false
		    	},{
		            xtype		: 'numberfield',
		            fieldLabel	: '前置节点[0-首节点]',
		       		width		: 160,
		            name		: 'preid',
		            allowBlank	: false
		    	},{
		    		xtype		: 'combo',
		            store		: new Ext.data.JsonStore({
		            	url	  		: '/admin/share/dorole.json',
		            	autoDestroy	: true,
		            	root		: 'dataset',
			        	fields		: ['id','name']
			    	}),
					displayField	: 'name',
					valueField		: 'id',
					minChars		: 1,
					 pageSize		: 10,
		            listWidth		: 258,
					mode			: 'remote',
					emptyText		: '请选择',
		            fieldLabel		: '节点处理角色',
		            typeAhead		: true,
		            forceSelection	: true,
		            width			: 160,
					triggerAction	: 'all',
					allowBlank		: false,
					hiddenName		: 'roleid',
		            name			: 'roleid'
		        },{
		            xtype		: 'numberfield',
		            fieldLabel	: '节点允许处理时间[单位小时]',
		       		width		: 160,
		            name		: 'expire',
		            allowBlank	: false
		    	},{
		    		xtype		: 'combo',
		            store		: new Ext.data.JsonStore({
		            	url		: '/admin/workflow/view/doshare.json',
		            	autoDestroy: true,
		            	fields: ['id', 'name'],
		            	root: 'dataset'
			    	}),
					displayField	: 'name',
					valueField		: 'id',
					mode			: 'remote',
					emptyText		: '请选择',
		            fieldLabel		: '节点关联表单ID',
		            typeAhead		: true,
		            pageSize		: 10,
		            forceSelection	: true,
		            width			: 256,
		            allowBlank		: false,
					triggerAction	: 'all',
					hiddenName		: 'formid',
		            name			: 'formid'
		        }]
			});
			win = new Ext.Window({
				title	: '新增工作流节点信息',
				iconCls	: 'icon-add',	
				width	: 520,
				items	: [nform],
				closeAction : 'hide',
				bbar 	: {
					xtype		: 'toolbar',
					buttonAlign	: 'right',
					items		: [{
						text	: '保存', 
						iconCls	: 'icon-save', 
						url     : '/admin/workflow/node/dosave.html',
						handler : function(){
						if(!nform.getForm().isValid())
		        			return;
		        		var workflowid = design.getForm().findField('id').getValue();
		        		workflowid     = parseInt(workflowid);
		        		if(!workflowid || workflowid < 1) {
		        			Ext.Msg.alert('信息提示', '请先保存工作流程表单，再处理节点！'); return;
		        		}
		        		nform.getForm().submit({
			        		waitMsg 	: '数据提交处理中...',
							waitTitle 	: '信息提示',
							params		: {
								'workflowid': workflowid
							},
			        		clientValidation: true,
			        		url			: '/admin/workflow/node/dosave.html',
				        	success		: function(form, action) {
				        		grid.store.baseParams.workflowid = workflowid;
				        		grid.store.reload();
				        		win.hide();
							},
							failure		: main.submitFailure
				    	});
					}}]
				}
			});
		}
		var id = (Ext.isObject(data))? data.get('id'):0;
		win.setTitle((id > 0)? '编辑节点':'新增节点');
		win.setIconClass((id > 0)? 'icon-edit':'icon-add');
		win.show();
		if(id < 1) {
			nform.getForm().reset();
		} else {
			nform.getForm().loadRecord(data);
			nform.getForm().findField('roleid').setRawValue(data.get('role'));
			nform.getForm().findField('formid').setRawValue(data.get('form'));
		}
	}
	
	container = {
		title		: response.title,
		layout		: 'border',
		region		: 'center',
		listeners   : {'destroy':function(){
			editor.destroy();
			var mxwin = Ext.DomQuery.select('div.mxWindow');
			Ext.each(mxwin, function(item){
				Ext.get(item).remove();
			});
			delete editor;
			win && win.close();
		}}, 
		items		: [design, graph, grid]
	}
	return container;
}();

